﻿// Copyright (c) 2009, Tom Lokovic
// All rights reserved.
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright notice,
//       this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

using Utils.Documentation;

namespace Byond.Midi
{
	/// <summary>
	/// A MIDI Channel.
	/// </summary>
	/// <remarks>
	/// <para>Each MIDI device has 16 independent channels.  Channels are named starting at 1, but
	/// are encoded programmatically starting at 0.</para>
	/// <para>All of the channels are general-purpose except for Channel10, which is the
	/// dedicated percussion channel.  Any notes sent to that channel will play
	/// percussion notes, regardless of any Program Change messages sent on that channel.</para>
	/// <para>This enum has extension methods, such as <see cref="ChannelExtensionMethods.Name"/>
	/// and <see cref="ChannelExtensionMethods.IsValid"/>, defined in
	/// <see cref="ChannelExtensionMethods"/>.</para>
	/// </remarks>
	[Doc]
	public static class Channels
	{
		/// <summary> MIDI Channel 1. </summary>
		[Doc]
		public static readonly Channel Channel0 = 0;
		
		/// <summary> MIDI Channel 2. </summary>
		[Doc]
		public static readonly Channel Channel1 = 1;
		
		/// <summary> MIDI Channel 3. </summary>
		[Doc]
		public static readonly Channel Channel2 = 2;
		
		/// <summary> MIDI Channel 4. </summary>
		[Doc]
		public static readonly Channel Channel3 = 3;
		
		/// <summary> MIDI Channel 5. </summary>
		[Doc]
		public static readonly Channel Channel4 = 4;
		
		/// <summary> MIDI Channel 6. </summary>
		[Doc]
		public static readonly Channel Channel5 = 5;
		
		/// <summary> MIDI Channel 7. </summary>
		[Doc]
		public static readonly Channel Channel6 = 6;
		
		/// <summary> MIDI Channel 8. </summary>
		[Doc]
		public static readonly Channel Channel7 = 7;
		
		/// <summary> MIDI Channel 9. </summary>
		[Doc]
		public static readonly Channel Channel8 = 8;
		
		/// <summary> MIDI Channel 10; the dedicated percussion channel. </summary>
		[Doc]
		public static readonly Channel Channel9 = 9;
		
		/// <summary> MIDI Channel 11. </summary>
		[Doc]
		public static readonly Channel Channel10 = 10;
		
		/// <summary> MIDI Channel 12. </summary>
		[Doc]
		public static readonly Channel Channel11 = 11;
		
		/// <summary> MIDI Channel 13. </summary>
		[Doc]
		public static readonly Channel Channel12 = 12;
		
		/// <summary> MIDI Channel 14. </summary>
		[Doc]
		public static readonly Channel Channel13 = 13;
		
		/// <summary> MIDI Channel 15. </summary>
		[Doc]
		public static readonly Channel Channel14 = 14;
		
		/// <summary> MIDI Channel 16. </summary>
		[Doc]
		public static readonly Channel Channel15 = 15;
	};
}
